int  hashsize[] = { 997, ... };  
typedef struct {
  ElemType  *elem;    
  int  count;            // 当前数据元素个数
  int  sizeindex;
               // hashsize[sizeindex]为当前容量
} HashTable;
#define  SUCCESS  1
#define  UNSUCCESS  0
#define  DUPLICATE  -1

Status SearchHash (HashTable H, ElemType K, int *p, int *c) // 在开放定址散列表H中查找关键字为K的记录
{
	*p = Hash(K);        // 求得哈希地址
	while ( H.elem[*p] != NULLKEY && K!= H.elem[*p] ) 
		collision(p, ++*c);       // 求下一探测地址 p
	if ( K == H.elem[*p]) return SUCCESS;                 
            // 查找成功，返回待查数据元素位置 p
	else return UNSUCCESS;   // 查找不成功
} // SearchHash

Status InsertHash (HashTable *H, Elemtype e)
{
	c = 0; // 冲突次数c的初值 
	if ( HashSearch (*H, e, &p, &c ) == SUCCESS )	// 表中已有与 e 有相同的关键字
    	return DUPLICATE;
    else if ( c < hashsize[H->sizeindex]/2 ) // 冲突次数未达到上限，（阈值 c 可调）
    {
    	H->elem[p] = e;  
    	++H->count;  
    	return OK;
        // 查找不成功时， 返回值p为插入位置
	}
	else  RecreateHashTable(H);        // 重建哈希表
} // InsertHash